package com.mj.mafeed.service;

import java.util.List;

import org.codehaus.jackson.map.ObjectMapper;

import android.content.Context;

import com.mj.mafeed.bean.CartItemJSON;
import com.mj.mafeed.bean.CartItemListJSON;
import com.mj.mafeed.config.Constants;
import com.mj.mafeed.dao.CartItemDao;
import com.mj.mafeed.util.HttpUtils;
import com.mj.mafeed.util.Md5Util;
import com.mj.mafeed.util.SPUtils;

/**
 * 购物车
 * @author zhaominglei
 * @date 2014-12-20
 * 
 */
public class CartItemService extends BaseService {
	private CartItemDao cartItemDao = new CartItemDao();
	
	/**
	 * 同步购物车
	 */
	public void syncCartItem(Context context, String referer, String username, String password) {
		String sign = null;
		if (referer != null && referer.equals("ShoppingFragment")) { //来自购物车
			StringBuilder signSB = new StringBuilder();
			signSB.append("username=").append(username).append("&password=").append(Md5Util.encrypt(password));
			sign = Md5Util.encrypt(signSB.toString());
		} else {
			username = (String)SPUtils.get(context, "username", "");
			sign = (String)SPUtils.get(context, "sign", "");
		}
		if (username != null && !username.equals("") && sign != null && !sign.equals("")) {
			StringBuilder param = new StringBuilder();
			param.append("username=").append(username).append("&sign=").append(sign);
			List<CartItemJSON> cartItems = cartItemDao.getAll(context);
			if (cartItems != null && cartItems.size() > 0) {
				StringBuilder sb = new StringBuilder();
				sb.append("&cartData=");
				for (CartItemJSON cartItemJSON : cartItems) {
					sb.append(cartItemJSON.getProductId()).append("!").append(cartItemJSON.getQuantity()).append(",");
				}
				param.append(sb.toString().substring(0, sb.toString().length()-1));
			}
			String result = HttpUtils.doPost(Constants.MEMBER_CART_SYNC_URL, param.toString());
			if (result != null && !result.equals("")) {
				try {
					CartItemListJSON cartItemListJSON = (CartItemListJSON)new ObjectMapper().readValue(result, CartItemListJSON.class);
					if (cartItemListJSON != null && cartItemListJSON.getRecordList() != null && cartItemListJSON.getRecordList().size() > 0) {
						cartItemDao.deleteAll(context);
						for(CartItemJSON cartItemJSON : cartItemListJSON.getRecordList()) {
							cartItemDao.save(context, cartItemJSON);
						}
					}
				}  catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	/**
	 * 获取所有购物车
	 */
	public CartItemListJSON getAll(Context context) {
		CartItemListJSON cartItemListJSON = new CartItemListJSON();
		cartItemListJSON.setRecordList(cartItemDao.getAll(context));
		return cartItemListJSON;
	}
	
	/**
	 * 同步并获取所有购物车
	 */
	public CartItemListJSON syncAndGetAll(Context context) {
		syncCartItem(context, null, null, null);
		CartItemListJSON cartItemListJSON = new CartItemListJSON();
		cartItemListJSON.setRecordList(cartItemDao.getAll(context));
		return cartItemListJSON;
	}
	
	/**
	 * 通过id获取购物车
	 */
	public CartItemJSON getById(Context context, Long cartItemId) {
		return cartItemDao.getById(context, cartItemId);
	}
	
	/**
	 * 更新购物车
	 */
	public void update(Context context, CartItemJSON cartItemJSON) {
		cartItemDao.update(context, cartItemJSON);
	}
	
	/**
	 * 删除购物车
	 */
	public void delete(Context context, CartItemJSON cartItemJSON) {
		if (cartItemJSON != null && cartItemJSON.getCartItemId() != null && cartItemJSON.getCartItemId().longValue() > 0l) {
			cartItemDao.delete(context, cartItemJSON.getCartItemId());
		}
	}
	
	/**
	 * 同步更新购物车
	 */
	public boolean updateCartItem(Context context, String referer, CartItemJSON cartItemJSON) {
		String username = (String)SPUtils.get(context, "username", "");
		String sign = (String)SPUtils.get(context, "sign", "");
		if (username != null && !username.equals("") && sign != null && !sign.equals("") 
				&& cartItemJSON != null && cartItemJSON.getCartItemId() != null 
				&& cartItemJSON.getCartItemId().longValue() > 0l) {
			StringBuilder param = new StringBuilder();
			param.append("username=").append(username).append("&sign=").append(sign);
			param.append("&cartItemData=").append(cartItemJSON.getCartItemId()).append("!");
			param.append(cartItemJSON.getProductId()).append("!").append(cartItemJSON.getQuantity());
			String result = HttpUtils.doPost(Constants.MEMBER_CART_UPDATE_URL, param.toString());
			if (result != null && result.equals("true")) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 同步删除购物车
	 */
	public boolean deleteCartItem(Context context, String referer, CartItemJSON cartItemJSON) {
		String username = (String)SPUtils.get(context, "username", "");
		String sign = (String)SPUtils.get(context, "sign", "");
		if (username != null && !username.equals("") && sign != null && !sign.equals("") 
				&& cartItemJSON != null && cartItemJSON.getCartItemId() != null 
				&& cartItemJSON.getCartItemId().longValue() > 0l) {
			StringBuilder param = new StringBuilder();
			param.append("username=").append(username).append("&sign=").append(sign);
			param.append("&cartItemData=").append(cartItemJSON.getCartItemId()).append("!");
			param.append(cartItemJSON.getProductId()).append("!").append(cartItemJSON.getQuantity());
			String result = HttpUtils.doPost(Constants.MEMBER_CART_DELETE_URL, param.toString());
			if (result != null && result.equals("true")) {
				return true;
			}
		}
		return false;
	}
	
	public void save(Context context, CartItemJSON cartItemJSON) {
		cartItemDao.save(context, cartItemJSON);
	}
	
	public CartItemJSON getByProductId(Context context, Long productId) {
		return cartItemDao.getByProductId(context, productId);
	}
}
